程式語言基礎教學在網路上很多,這裡只提一些我在學習 Kotlin 時遇到一些其他語言比較不常見的用法
Kotlin 對於只有一個參數的 lambda 可以省略宣告參數名稱,自動命名為 it
val foo: (Int) -> Int = { it + 1 }
lambda 可以將最後一行當作回傳
val foo: (Int) -> Int = {
val num = it + 1
num
}
當 lambda 作為函式的最後一個參數時,呼叫函式時可以將 lambda 挪到括號外面
fun foo(num: Int, scope: (Int) -> Unit) {
scope(num)
}
fun main() {
foo(1) {
println(it)
}
}
以往要寫一個對變數操作的函式把變數當成參數傳進去再操作,這個技巧可以讓函式的 scope 在那個 Class 裡面
fun String.quoted(): String = "'$this'"
val String.quoted: String
get() = "'$this'"
不只 function,連 lambda 都能宣告成 class extension
fun main() {
val quoted: String.() -> String = { "'$this'" }
println("A B C".quoted())
}
只要一個 class 實作 getValue
和 setValue
的運算子方法時,變數可以委派給這個 class,相當於把變數的 getter 跟 setter 委派給這個 class
class Delegate {
operator fun getValue(thisRef: Any?, property: KProperty<*>):Int {
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) {
}
}
val num1: Int by Delegate()